package com.sxf.core.validator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 数字多种范围判断
 * @author SSLi
 */
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = { AllowedNumberRangeValidator.class })
public @interface AllowedNumberRange {

	String message();

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };

	/**
	 * 最大值 default Long 最大值
	 * @return 值元素必须小于或等于
	 */
	long max() default Long.MAX_VALUE;

	/**
	 * 指定指定的最大值是包含值还是排除值。
	 * 默认情况下，包含.
	 *
	 * @return {@code true} 该值必须小于或等于指定的最大值,
	 *         {@code false} 该值必须小于指定的最大值,
	 */
	boolean maxInclusive() default true;

	/**
	 * 最小值 default Long 最小值
	 * @return 值元素必须大于或等于
	 */
	long min() default Long.MIN_VALUE;

	/**
	 * 指定指定的最小值是包含值还是排除值。
	 * 默认情况下，包含.
	 *
	 * @return {@code true} 该值必须大于或等于指定的最小值,
	 *         {@code false} 该值必须大于指定的最小值,
	 */
	boolean minInclusive() default true;

	/**
	 * @return 此数字接受的最大整数位数
	 */
	int integer();

	/**
	 * @return 此数字接受的小数位数的最大数目
	 */
	int fraction();

	/**
	 * 校验时是否需要包含null
	 * @return 校验时是否需要包含null
	 */
	boolean checkNull() default true;

	/**
	 * 校验时是否允许负数
	 * @return 校验时是否需要包含null
	 */
	boolean negative() default true;
}
